package Builder;
import javax.media.opengl.GL2;
import javax.media.opengl.glu.GLU;
import Command.LDrawPart;
import Common.Box2;
import Common.Size2;
import Common.Vector2f;
import Common.Vector3f;
import Window.MOCBuilder;
public class DragSelectionInfoRenderer {
private GLU glu;
private boolean isVisible = false;
private Vector2f origin;
private Vector2f end;
private Size2 canvasSize;
private LDrawPart part = null;
public DragSelectionInfoRenderer() {
glu = new GLU();
origin = new Vector2f();
end = new Vector2f();
canvasSize = new Size2();
}
public void setPart(LDrawPart part) {
this.part = part;
}
public void setCanvasSize(int width, int height) {
this.canvasSize.setWidth(width);
this.canvasSize.setHeight(height);
}
public Size2 getCanvasSize() {
return canvasSize;
}
public void isVisible(boolean flag) {
this.isVisible = flag;
}
public boolean isVisible() {
return this.isVisible;
}
public void setOrigin(Vector2f origin) {
this.origin = origin;
this.end = origin;
}
public void setEnd(Vector2f end) {
this.end = end;
}
public Vector2f getOrigin() {
return this.origin;
}
public Vector2f getEnd() {
return this.end;
}
public void draw(GL2 gl2) {
if (isVisible == false)
return;
gl2.glUseProgram(0);
gl2.glMatrixMode(GL2.GL_PROJECTION);
gl2.glLoadIdentity();
glu.gluOrtho2D(0, canvasSize.getWidth(), 0, canvasSize.getHeight());
gl2.glMatrixMode(GL2.GL_MODELVIEW);
gl2.glLoadIdentity();
gl2.glColor3f(0.5f, 0.5f, 0.5f);
gl2.glBegin(GL2.GL_LINES);
gl2.glVertex2f(origin.getX(), canvasSize.getHeight() - origin.getY());
gl2.glVertex2f(origin.getX(), canvasSize.getHeight() - end.getY());
gl2.glVertex2f(origin.getX(), canvasSize.getHeight() - end.getY());
gl2.glVertex2f(end.getX(), canvasSize.getHeight() - end.getY());
gl2.glVertex2f(end.getX(), canvasSize.getHeight() - end.getY());
gl2.glVertex2f(end.getX(), canvasSize.getHeight() - origin.getY());
gl2.glVertex2f(end.getX(), canvasSize.getHeight() - origin.getY());
gl2.glVertex2f(origin.getX(), canvasSize.getHeight() - origin.getY());
gl2.glEnd();
gl2.glFlush();
drawTestPart(gl2);
}
private void drawTestPart(GL2 gl2) {
if (part == null)
return;
Vector3f[] vertices = part.getCachedOOB();
Vector2f[] vertices2f = new Vector2f[8];
for (int i = 0; i < 8; i++) {
vertices2f[i] = MOCBuilder.getInstance().getCamera()
.getWorldToScreenPos(vertices[i]);
}
drawBoundingBox(gl2, vertices2f);
}
private void drawBoundingBox(GL2 gl2, Vector2f[] pos) {
gl2.glBegin(GL2.GL_LINES); // draw using triangles
gl2.glColor4d(1, 0, 0, 1.0f);
for (int x = 0; x < 7; x++)
for (int y = x; y < 8; y++) {
gl2.glVertex2f(canvasSize.getWidth() / 2 + pos[x].getX(),
canvasSize.getHeight() / 2 + pos[x].getY());
gl2.glVertex2f(canvasSize.getWidth() / 2 + pos[y].getX(),
canvasSize.getHeight() / 2 + pos[y].getY());
}
gl2.glEnd();
}
public Box2 getBounds() {
Box2 bounds = new Box2();
bounds.origin = new Vector2f(Math.min(origin.getX(), end.getX())
- canvasSize.getWidth() / 2, Math.min(canvasSize.getHeight()
/ 2 - origin.getY(), canvasSize.getHeight() / 2 - end.getY()));
bounds.size = new Size2(Math.abs(origin.getX() - end.getX()),
Math.abs(origin.getY() - end.getY()));
return bounds;
}
}